package com.itheima.service.impl;

import com.itheima.annotation.MyTransactional;
import com.itheima.mapper.DeptMapper;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Dept;
import com.itheima.pojo.DeptLog;
import com.itheima.service.DeptLogService;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

@Service

public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;
    @Autowired
    private EmpMapper empMapper;
//    private DeptLog deptLog;
    @Autowired
    private DeptLogService deptLogService;

    /**
     * 查询所有部门
     *
     * @return
     */

    @Override
    public List<Dept> list() {
        // 调用mapper层方法,索取所有部门

        return deptMapper.list();
    }


    /**
     * 根据id删除部门
     * @Transactional // spring执行该方法会进行事务管理
     * @param id 被删除的部门id
     * @return
     */
    @Transactional(rollbackFor = Exception.class) // rollbackFor属性,指定要回滚的异常
    @Override
    public void delete(Integer id)   {

        // 1.调用mapper层方法 根据部门id删除部门
        try {
            deptMapper.delete(id);
           // int i=1/0; // 模拟抛出异常

            // 2.根据部门id,删除部门下的员工信息
            empMapper.deleteByDeptId(id);
        } finally {
            // 添加日志信息
            DeptLog deptLog = new DeptLog();
            deptLog.setCreateTime(LocalDateTime.now());  // 修改当前时间
            deptLog.setDescription("正在删除id="+id+"部门信息");
            deptLogService.insert(deptLog);  // 调用deptLogService 的方法
        }






    }


    /**
     * 添加部门
     * @param dept
     */
    @MyTransactional
    @Override
    public void add(Dept dept) {
        // 1.补充基础属性(创建时间和修改时间)
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        // 2.调用mapper方法,添加部门
        deptMapper.add(dept);
    }



    /**
     * 根据id查询部门
     * @param id
     * @return
     */
    @Override
    public Dept show(Integer id) {
        // 调用mapper层方法,根据id获取部门
        return deptMapper.show(id);  //传入 id
    }




    /**
     * 修改部门
     * @param dept
     * @return
     */
    @Override
    public void modify(Dept dept ) {
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.modify(dept);
    }


}
